#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
配置模型
定义系统配置相关的数据库表结构
"""

from sqlalchemy import Column, String, Text, Boolean, Enum
from .base import BaseModel, db
from sqlalchemy.orm import validates
import enum

class ClientType(enum.Enum):
    WECHAT = 'wechat'  # 微信
    XIAOHONGSHU = 'xiaohongshu'  # 小红书
    DOUYIN = 'douyin'  # 抖音
    KUAISHOU = 'kuaishou'  # 快手
    WHATSAPP = 'whatsapp'  # WhatsApp


class Belong(BaseModel):
    """
    存储微信归属的表

    为了未来的扩展，将微信的归属信息存储在这个表中。
    每个客资或者微信群需要属于独立的微信账号。

    因为我的系统可以介入多个微信账号，所以需要一个表来存储每个账号的归属信息。
    每个账号可以有多个客资或者微信群，所以需要一个表来存储每个客资或者微信群的归属信息。
    """
    __tablename__ = 'belongs'
    
    # 微信账号
    account = Column(String(100), nullable=False, comment='账号')
    # 客资或者微信群
    alias = Column(String(100), nullable=False, comment='账户的别名')
    # 账户归属类型
    account_type = Column(
        Enum(ClientType),
        nullable=False, 
        default=ClientType.WECHAT,
        comment='账户归属类型'
    )

    @validates('account_type')
    def validate_account_type(self, key, value):
        if isinstance(value, str):
            try:
                return ClientType(value)
            except ValueError:
                raise ValueError(f'Invalid account type. Must be one of: {", ".join([t.value for t in ClientType])}')
        return value

    def to_dict(self):
        """转换为字典格式"""
        return {
            'id': self.id,
            'account': self.account,
            'alias': self.alias,
            'account_type': self.account_type.value if self.account_type else None,
            'created_at': self.created_at.isoformat() if self.created_at else None,
            'updated_at': self.updated_at.isoformat() if self.updated_at else None
        }
    
    def __repr__(self):
        return f'<Belong(id={self.id}, account="{self.account}", alias="{self.alias}")>'
